package 哈希表;

/**
 * @author: 大怪
 * @email: 962527441@qq.com
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

/**
 * 给定一个字符串数组 strs ，将 变位词 组合在一起。 可以按任意顺序返回结果列表。
 * 注意：若两个字符串中每个字符出现的次数都相同，则称它们互为变位词。
 *
 * 示例 1:
 *
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 *
 */
public class 变位词组 {
    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
            for (String string : strs) {
                char[] c = string.toCharArray();
                Arrays.sort(c);
                String key = new String(c);
                ArrayList<String> list = map.getOrDefault(key, new ArrayList<String>());
                list.add(string);
                map.put(key, list);
            }
            return new ArrayList<List<String>>(map.values());
        }
    }
}
